概要
Microsoft SQL Server 2016 の一部のクエリ実行プランには、テーブルまたはインデックススキャン/範囲操作でフィルターを評価するパターンが含まれています。 フィルター述語の一部は、インデックス キーと一致する可能性があるため、インデックス シークまたは範囲スキャンを実行するために使用できます。 述語の残りの部分は残余と呼ばれ、スキャン操作または範囲操作によって行出力ごとに評価する必要があります。 これはフィルター演算子に対応します。 ただし、パフォーマンスを向上させるために、SQL Serverはこのようなフィルターをテーブル アクセス 演算子自体にプッシュダウンできます。
この方法では全体的なパフォーマンスが向上しますが、一部の条件下 (たとえば、パラメーターの感度に関連する不正確なカーディナリティ推定など) では、スキャン以下のフィルターで予想よりも多くの行が処理される場合があります。 返される行の数は、テーブルまたはインデックスからスキャンされた行の実際の数ではなく、残余述語が適用された後の行数に対応するため、実際の実行プランを使用している場合、この動作はクエリ パフォーマンスのトラブルシューティング中に非表示になる可能性があります。
更新情報
「現象」セクションで説明されているシナリオの診断を改善するために、SQL Server 2016 Service Pack 1 (SP1) では、新しいプラン表示 XML 属性 "推定行読み取り" が導入されています。 この属性は、残余述語が適用される前に演算子によって読み取られる行の推定数を提供します。 この更新プログラムは、KB 3107397を補完するものです。
この機能は、SQL Server 2016 の Service Pack 1 に含まれています。
SQL Server 2016 ビルドについて
SQL Server 2016 の各新しいビルドには、すべての修正プログラムと、前のビルドに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Server 2016 の最新ビルドをインストールすることをお勧めします。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。